#include <stdlib.h>
//
// Created by 啊汤哥 on 2025/9/11.
//
typedef struct LNode {
    int data;
    LNode *next;
}LNode, *LinkList;

// 初始话链表 -- 分配空间
bool InitLinkList(LinkList &L) {
    L = (LNode*)malloc(sizeof(LNode));
    if (L == nullptr)return false;
    L->next = nullptr;
    return true;
}
// 插入  在一个固定的位置插入 -- 先找到这个位置
bool InsertLink(LinkList &L, int pos, int data) {
    LNode *p = L;
    int j = 0;
    while (p != NULL && j<pos-1) {
        p = p->next;
        j++;
    }
    if (p == nullptr ) return false;

    // 找到就给这个分配空间
    LNode *d = (LNode*)malloc(sizeof(LNode));
    d->data = data;
    d->next = p->next;
    p->next = d;
    return true;
}

// 删除
bool DeleteLink(LinkList &L, int pos, int &data) {
    if (pos < 1) return false;
    LNode *p = L;
    int j = 0;
    while (p->next!=NULL && j < pos-1) {
        p = p->next;
        j++;
    }
    if (p->next != nullptr || j > pos-1) {
        return false;
    }
    // 找到这个节点的值
    LNode *delNode = p->next;
    data = delNode->data;
    p->next = delNode->next;
    free(delNode);
    return true;

}

LNode *LocateElement(LinkList L, int value) {
    LNode *p = L->next;
    while (p != nullptr && p->data != value) {
        p = p->next;
    }
    return p;
}